CSS scroll-behaviorλ₯Ό λ§μ€ν°νμ¬ λΆλλ½κ³ μ κ·Όμ± λμ νμμ ꡬννμΈμ. μνν μ¬μ©μ κ²½νμ μν ꡬν κΈ°μ , λΈλΌμ°μ νΈνμ±, κ³ κΈ μ¬μ©μ μ μ μ΅μ μ λ°°μ보μΈμ.
CSS μ€ν¬λ‘€ λμ: λΆλλ¬μ΄ μ€ν¬λ‘€λ§μ μν μ’ ν© κ°μ΄λ
μ€λλ μ μΉ κ°λ° νκ²½μμ μ¬μ©μ κ²½ν(UX)μ λ§€μ° μ€μν©λλ€. UXμ μλΉν μν₯μ λ―ΈμΉ μ μλ μ¬μν΄ λ³΄μ΄λ ν κ°μ§ μΈλΆ μ¬νμ μ€ν¬λ‘€λ§μ λΆλλ¬μμ
λλ€. μΉμ
κ°μ μ걱거리λ μ΄λμ λ μ΄μ μμ΅λλ€! CSSμ scroll-behavior
μμ±μ λΆλλ¬μ΄ μ€ν¬λ‘€λ§μ ꡬννλ κ°λ¨νλ©΄μλ κ°λ ₯ν λ°©λ²μ μ 곡νμ¬ μΉμ¬μ΄νΈ μ κ·Όμ±κ³Ό μ λ°μ μΈ μ¬μ©μ λ§μ‘±λλ₯Ό ν₯μμν΅λλ€. μ΄ κ°μ΄λλ scroll-behavior
μ λν μ’
ν©μ μΈ νꡬλ₯Ό μ 곡νλ©°, κΈ°λ³Έμ μΈ κ΅¬νλΆν° κ³ κΈ μ¬μ©μ μ μ λ° μ§μ ν κΈλ‘λ² μ¬μ©μλ₯Ό μν λΈλΌμ°μ νΈνμ± κ³ λ € μ¬νκΉμ§ λͺ¨λ κ²μ λ€λ£Ήλλ€.
CSS μ€ν¬λ‘€ λμμ΄λ?
CSSμ scroll-behavior
μμ±μ μ€ν¬λ‘€ μμμ μ€ν¬λ‘€ λμμ μ§μ ν μ μκ² ν΄μ€λλ€. κΈ°λ³Έμ μΌλ‘ μ€ν¬λ‘€λ§μ μ¦κ°μ μΌλ‘ μ΄λ£¨μ΄μ Έ νμ΄μ§μ λ€λ₯Έ λΆλΆμΌλ‘ μ΄λν λ κ°μμ€λ¬μ΄ μ νκ° λ°μν©λλ€. scroll-behavior: smooth;
λ μ΄λ₯Ό λ³κ²½νμ¬ μ΅μ»€ λ§ν¬ ν΄λ¦, νμ΄ν ν€ μ¬μ© λλ νλ‘κ·Έλλ° λ°©μμΌλ‘ μ€ν¬λ‘€μ μμνλ λ± μ€ν¬λ‘€μ΄ νΈλ¦¬κ±°λ λ λΆλλ½κ³ μ λλ©μ΄μ
νλ μ νμ μ 곡ν©λλ€.
scroll-behavior: smooth;
μ κΈ°λ³Έ ꡬν
λΆλλ¬μ΄ μ€ν¬λ‘€λ§μ νμ±ννλ κ°μ₯ κ°λ¨ν λ°©λ²μ html
λλ body
μμμ scroll-behavior: smooth;
μμ±μ μ μ©νλ κ²μ
λλ€. μ΄λ κ² νλ©΄ λ·°ν¬νΈ λ΄μ λͺ¨λ μ€ν¬λ‘€λ§μ΄ λΆλλ¬μμ§λλ€.
html
μμμ μ μ©:
μ΄κ²μ μΌλ°μ μΌλ‘ νμ΄μ§ μ 체μ μ€ν¬λ‘€λ§ λμμ μν₯μ λ―ΈμΉλ―λ‘ μ νΈλλ λ°©λ²μ λλ€.
html {
scroll-behavior: smooth;
}
body
μμμ μ μ©:
μ΄ λ°©λ²λ μλνμ§λ§, body
λ΄μ μ½ν
μΈ μλ§ μν₯μ λ―ΈμΉλ―λ‘ λ μΌλ°μ μ
λλ€.
body {
scroll-behavior: smooth;
}
μμ: μ¬λ¬ μΉμ μ΄ μ λͺ©μΌλ‘ μλ³λλ κ°λ¨ν μΉνμ΄μ§λ₯Ό μμν΄ λ³΄μΈμ. μ¬μ©μκ° μ΄ μΉμ μ€ νλλ₯Ό κ°λ¦¬ν€λ νμ λ§ν¬λ₯Ό ν΄λ¦νλ©΄, ν΄λΉ μΉμ μΌλ‘ μ¦μ μ΄λνλ λμ νμ΄μ§κ° λΆλλ½κ² μ€ν¬λ‘€λ©λλ€.
μ΅μ»€ λ§ν¬λ₯Ό μ¬μ©ν λΆλλ¬μ΄ μ€ν¬λ‘€λ§
μ΅μ»€ λ§ν¬(μ‘°κ° μλ³μλΌκ³ λ ν¨)λ μΉνμ΄μ§ λ΄μμ νμνλ μΌλ°μ μΈ λ°©λ²μ
λλ€. μΌλ°μ μΌλ‘ λͺ©μ°¨λ λ¨μΌ νμ΄μ§ μΉμ¬μ΄νΈμμ μ¬μ©λ©λλ€. scroll-behavior: smooth;
λ₯Ό μ¬μ©νλ©΄ μ΅μ»€ λ§ν¬λ₯Ό ν΄λ¦ν λ λΆλλ¬μ΄ μ€ν¬λ‘€λ§ μ λλ©μ΄μ
μ΄ νΈλ¦¬κ±°λ©λλ€.
μ΅μ»€ λ§ν¬λ₯Ό μν HTML ꡬ쑰:
Section 1
Content of section 1...
Section 2
Content of section 2...
Section 3
Content of section 3...
CSS κ·μΉ html { scroll-behavior: smooth; }
κ° μ μ©λλ©΄, νμμ μ΄λ€ λ§ν¬λ₯Ό ν΄λ¦νλλΌλ ν΄λΉ μΉμ
μΌλ‘ λΆλλ¬μ΄ μ€ν¬λ‘€λ§ μ λλ©μ΄μ
μ΄ λ°μν©λλ€.
νΉμ μ€ν¬λ‘€ κ°λ₯ μμ λμ μ§μ
scroll-behavior: smooth;
λ₯Ό overflow: auto;
λλ overflow: scroll;
μ΄ μλ divμ κ°μ νΉμ μ€ν¬λ‘€ κ°λ₯ μμμ μ μ©ν μλ μμ΅λλ€. μ΄λ κ² νλ©΄ νμ΄μ§μ λλ¨Έμ§ λΆλΆμ μν₯μ λ―ΈμΉμ§ μκ³ νΉμ 컨ν
μ΄λ λ΄μμ λΆλλ¬μ΄ μ€ν¬λ‘€λ§μ νμ±νν μ μμ΅λλ€.
μμ: Div λ΄μμ λΆλλ¬μ΄ μ€ν¬λ‘€λ§:
Lots of content here...
More content...
Even more content...
.scrollable-container {
width: 300px;
height: 200px;
overflow: scroll;
scroll-behavior: smooth;
}
μ΄ μμμμλ .scrollable-container
λ΄μ μ½ν
μΈ λ§ λΆλλ½κ² μ€ν¬λ‘€λ©λλ€.
JavaScriptλ₯Ό μ¬μ©ν νλ‘κ·Έλλ° λ°©μμ λΆλλ¬μ΄ μ€ν¬λ‘€λ§
scroll-behavior: smooth;
λ μ¬μ©μ μνΈ μμ©(μ: μ΅μ»€ λ§ν¬ ν΄λ¦)μ μν΄ νΈλ¦¬κ±°λλ μ€ν¬λ‘€λ§μ μ²λ¦¬νμ§λ§, JavaScriptλ₯Ό μ¬μ©νμ¬ νλ‘κ·Έλλ° λ°©μμΌλ‘ μ€ν¬λ‘€λ§μ μμν΄μΌ ν μλ μμ΅λλ€. scrollTo()
λ° scrollBy()
λ©μλλ behavior: 'smooth'
μ΅μ
κ³Ό κ²°ν©λ λ μ΄λ₯Ό λ¬μ±νλ λ°©λ²μ μ 곡ν©λλ€.
scrollTo()
μ¬μ©:
scrollTo()
λ©μλλ μ°½μ νΉμ μ’νλ‘ μ€ν¬λ‘€ν©λλ€.
window.scrollTo({
top: 500,
left: 0,
behavior: 'smooth'
});
μ΄ μ½λλ μ°½μ μλ¨μμ 500ν½μ μμ§ μ€νμ μΌλ‘ λΆλλ½κ² μ€ν¬λ‘€ν©λλ€.
scrollBy()
μ¬μ©:
scrollBy()
λ©μλλ μ°½μ μ§μ λ μλ§νΌ μ€ν¬λ‘€ν©λλ€.
window.scrollBy({
top: 100,
left: 0,
behavior: 'smooth'
});
μ΄ μ½λλ μ°½μ μλλ‘ 100ν½μ λ§νΌ λΆλλ½κ² μ€ν¬λ‘€ν©λλ€.
μμ: λ²νΌ ν΄λ¦ μ μμλ‘ λΆλλ½κ² μ€ν¬λ‘€λ§:
Section 3
Content of section 3...
const scrollButton = document.getElementById('scrollButton');
const section3 = document.getElementById('section3');
scrollButton.addEventListener('click', () => {
section3.scrollIntoView({
behavior: 'smooth'
});
});
λ²νΌμ ν΄λ¦νλ©΄ scrollIntoView()
λ₯Ό μ¬μ©νμ¬ νμ΄μ§κ° "μΉμ
3" μμλ‘ λΆλλ½κ² μ€ν¬λ‘€λ©λλ€. μ΄ λ°©λ²μ λμ μ½ν
μΈ λ³κ²½κ³Ό κ΄κ³μμ΄ λμ μμμ μ νν μμΉλ₯Ό κ³μ°νλ―λ‘ μ’
μ’
μ νΈλ©λλ€.
μ€ν¬λ‘€ μλ λ° μ΄μ§ μ¬μ©μ μ μ
scroll-behavior: smooth;
λ κΈ°λ³Έμ μΌλ‘ λΆλλ¬μ΄ μ€ν¬λ‘€λ§ μ λλ©μ΄μ
μ μ 곡νμ§λ§, CSSλ§μΌλ‘λ μλλ μ΄μ§(μκ°μ λ°λ₯Έ μ λλ©μ΄μ
λ³νμ¨)μ μ§μ μ μ΄ν μ μμ΅λλ€. μ¬μ©μ μ μμλ JavaScriptκ° νμν©λλ€.
μ€μ μ°Έκ³ : μ§λμΉκ² κΈΈκ±°λ 볡μ‘ν μ λλ©μ΄μ μ UXμ ν΄λ‘μΈ μ μμΌλ©°, λ©λ―Έλ₯Ό μ λ°νκ±°λ μ¬μ©μ μνΈ μμ©μ λ°©ν΄ν μ μμ΅λλ€. λ―Έλ¬νκ³ ν¨μ¨μ μΈ μ λλ©μ΄μ μ μν΄ λ Έλ ₯νμΈμ.
JavaScript κΈ°λ° μ¬μ©μ μ μ:
μ€ν¬λ‘€ μλμ μ΄μ§μ μ¬μ©μ μ μνλ €λ©΄ JavaScriptλ₯Ό μ¬μ©νμ¬ μ¬μ©μ μ μ μ λλ©μ΄μ
μ λ§λ€μ΄μΌ ν©λλ€. μ΄λ μΌλ°μ μΌλ‘ GSAP(GreenSock Animation Platform)μ κ°μ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νκ±°λ requestAnimationFrame
λ₯Ό μ¬μ©νμ¬ μμ λ§μ μ λλ©μ΄μ
λ‘μ§μ ꡬννλ κ²μ ν¬ν¨ν©λλ€.
requestAnimationFrame
μ¬μ© μμ:
function smoothScroll(target, duration) {
const start = window.pageYOffset;
const targetPosition = target.getBoundingClientRect().top;
const startTime = performance.now();
function animation(currentTime) {
const timeElapsed = currentTime - startTime;
const run = ease(timeElapsed, start, targetPosition, duration);
window.scrollTo(0, run);
if (timeElapsed < duration) {
requestAnimationFrame(animation);
}
}
// Easing function (e.g., easeInOutQuad)
function ease(t, b, c, d) {
t /= d/2;
if (t < 1) return c/2*t*t + b;
t--;
return -c/2 * (t*(t-2) - 1) + b;
}
requestAnimationFrame(animation);
}
// Example usage:
const targetElement = document.getElementById('section3');
const scrollDuration = 1000; // milliseconds
smoothScroll(targetElement, scrollDuration);
μ΄ μ½λλ λμ μμμ μ§μ μκ°μ μ
λ ₯μΌλ‘ λ°λ smoothScroll
ν¨μλ₯Ό μ μν©λλ€. requestAnimationFrame
λ₯Ό μ¬μ©νμ¬ λΆλλ¬μ΄ μ λλ©μ΄μ
μ λ§λ€κ³ , μ λλ©μ΄μ
μλλ₯Ό μ μ΄νκΈ° μν μ΄μ§ ν¨μ(μ΄ μμμμλ easeInOutQuad
)λ₯Ό ν¬ν¨ν©λλ€. λ€μν μ λλ©μ΄μ
ν¨κ³Όλ₯Ό μν΄ μ¨λΌμΈμμ μ¬λ¬ μ΄μ§ ν¨μλ₯Ό μ°Ύμ μ μμ΅λλ€.
μ κ·Όμ± κ³ λ € μ¬ν
λΆλλ¬μ΄ μ€ν¬λ‘€λ§μ UXλ₯Ό ν₯μμν¬ μ μμ§λ§, μ κ·Όμ±μ κ³ λ €νλ κ²μ΄ μ€μν©λλ€. μΌλΆ μ¬μ©μλ λΆλλ¬μ΄ μ€ν¬λ‘€λ§μ μ°λ§νκ² λλΌκ±°λ μ¬μ§μ΄ νΌλμ€λ¬μν μλ μμ΅λλ€. λΆλλ¬μ΄ μ€ν¬λ‘€λ§μ λΉνμ±ννλ λ°©λ²μ μ 곡νλ κ²μ ν¬κ΄μ±μ μν΄ νμμ μ λλ€.
μ¬μ©μ μ νΈλ ꡬν:
κ°μ₯ μ’μ λ°©λ²μ μμ§μμ μ€μ΄κΈ° μν μ¬μ©μ μ΄μ 체μ μ€μ μ μ‘΄μ€νλ κ²μ
λλ€. prefers-reduced-motion
μ κ°μ λ―Έλμ΄ μΏΌλ¦¬λ₯Ό μ¬μ©νλ©΄ μ¬μ©μκ° μμ€ν
μ€μ μμ μμ§μ κ°μλ₯Ό μμ²νλμ§ κ°μ§ν μ μμ΅λλ€.
prefers-reduced-motion
μ¬μ©:
@media (prefers-reduced-motion: reduce) {
html {
scroll-behavior: auto !important; /* Override smooth scrolling */
}
}
μ΄ μ½λλ μ¬μ©μκ° μ΄μ 체μ μμ "μμ§μ κ°μ" μ€μ μ νμ±νν κ²½μ° λΆλλ¬μ΄ μ€ν¬λ‘€λ§μ λΉνμ±νν©λλ€. !important
νλκ·Έλ μ΄ κ·μΉμ΄ λ€λ₯Έ scroll-behavior
μ μΈμ μ¬μ μνλλ‘ λ³΄μ₯νλ λ° μ¬μ©λ©λλ€.
μλ ν κΈ μ 곡:
μ¬μ©μκ° λΆλλ¬μ΄ μ€ν¬λ‘€λ§μ νμ±ννκ±°λ λΉνμ±νν μ μλ μλ ν κΈ(μ: 체ν¬λ°μ€)μ μ 곡ν μλ μμ΅λλ€. μ΄λ μ¬μ©μμκ² μμ μ κ²½νμ λν λ μ§μ μ μΈ μ μ΄κΆμ λΆμ¬ν©λλ€.
const smoothScrollToggle = document.getElementById('smoothScrollToggle');
smoothScrollToggle.addEventListener('change', () => {
if (smoothScrollToggle.checked) {
document.documentElement.style.scrollBehavior = 'smooth';
} else {
document.documentElement.style.scrollBehavior = 'auto';
}
});
μ΄ μ½λλ μ¬μ©μκ° λΆλλ¬μ΄ μ€ν¬λ‘€λ§μ μΌκ±°λ λ μ μλ 체ν¬λ°μ€λ₯Ό μΆκ°ν©λλ€. μ΄ μ¬μ©μ μ νΈλλ₯Ό μΈμ κ°μ κΈ°μ΅νλλ‘ μ§μμν€λ κ²(μ: λ‘컬 μ μ₯μ μ¬μ©)μ μμ§ λ§μΈμ.
λΈλΌμ°μ νΈνμ±
scroll-behavior
λ λΈλΌμ°μ μ§μμ΄ μνΈνμ§λ§, μ΄λ₯Ό μ§μνμ§ μμ μ μλ μ΄μ λΈλΌμ°μ μ μ μνλ κ²μ΄ μ€μν©λλ€. λ€μμ λΈλΌμ°μ νΈνμ±μ λν μμ½μ
λλ€.
- Chrome: λ²μ 61λΆν° μ§μ
- Firefox: λ²μ 36λΆν° μ§μ
- Safari: λ²μ 14.1λΆν° μ§μ (μ΄μ λ²μ μμλ λΆλΆ μ§μ)
- Edge: λ²μ 79λΆν° μ§μ
- Opera: λ²μ 48λΆν° μ§μ
- Internet Explorer: λ―Έμ§μ
μ΄μ λΈλΌμ°μ λ₯Ό μν λ체 κΈ°λ₯ μ 곡:
scroll-behavior
λ₯Ό μ§μνμ§ μλ λΈλΌμ°μ μ κ²½μ° JavaScript ν΄λ¦¬νμ μ¬μ©ν μ μμ΅λλ€. ν΄λ¦¬νμ μ΄μ λΈλΌμ°μ μμ μ΅μ κΈ°λ₯μ κΈ°λ₯μ μ 곡νλ μ½λ μ‘°κ°μ
λλ€.
μμ: ν΄λ¦¬ν μ¬μ©:
λΆλλ¬μ΄ μ€ν¬λ‘€λ§ ν΄λ¦¬νμ μ 곡νλ μ¬λ¬ JavaScript λΌμ΄λΈλ¬λ¦¬κ° μμ΅λλ€. ν κ°μ§ μ΅μ μ "smoothscroll-polyfill"κ³Ό κ°μ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νλ κ²μ λλ€.
μ΄ μ½λλ "smoothscroll-polyfill" λΌμ΄λΈλ¬λ¦¬λ₯Ό ν¬ν¨νκ³ μ΄κΈ°νν©λλ€. μ΄λ κ² νλ©΄ scroll-behavior
λ₯Ό κΈ°λ³Έμ μΌλ‘ μ§μνμ§ μλ μ΄μ λΈλΌμ°μ μμ λΆλλ¬μ΄ μ€ν¬λ‘€λ§ κΈ°λ₯μ μ 곡ν©λλ€.
μ‘°κ±΄λΆ λ‘λ©: μ΅μ λΈλΌμ°μ μμ λΆνμν μ€λ²ν€λλ₯Ό νΌνκΈ° μν΄ μ€ν¬λ¦½νΈ λ‘λ λλ κΈ°λ₯ κ°μ§λ₯Ό μ¬μ©νμ¬ ν΄λ¦¬νμ 쑰건λΆλ‘ λ‘λνλ κ²μ κ³ λ €νμΈμ.
λΆλλ¬μ΄ μ€ν¬λ‘€λ§μ μν λͺ¨λ² μ¬λ‘
λΆλλ¬μ΄ μ€ν¬λ‘€λ§μ ꡬνν λ λͺ μ¬ν΄μΌ ν λͺ κ°μ§ λͺ¨λ² μ¬λ‘λ λ€μκ³Ό κ°μ΅λλ€.
- λ―Έλ¬νκ² μ μ§: μ°λ§νκ±°λ λ©λ―Έλ₯Ό μ λ°ν μ μλ μ§λμΉκ² κΈΈκ±°λ 볡μ‘ν μ λλ©μ΄μ μ νΌνμΈμ.
- μ κ·Όμ± κ³ λ €: μ¬μ©μκ° νΌλμ€λ¬μν κ²½μ° λΆλλ¬μ΄ μ€ν¬λ‘€λ§μ λΉνμ±νν μ μλ λ°©λ²μ μ 곡νμΈμ. μμ§μ κ°μμ λν μ¬μ©μ μ νΈλλ₯Ό μ‘΄μ€νμΈμ.
- λ€μν μ₯μΉμμ ν μ€νΈ: λΆλλ¬μ΄ μ€ν¬λ‘€λ§μ΄ λ€μν μ₯μΉ λ° νλ©΄ ν¬κΈ°μμ μ μλνλμ§ νμΈνμΈμ.
- μ±λ₯ μ΅μ ν: λΆλλ¬μ΄ μ€ν¬λ‘€λ§ μ λλ©μ΄μ μ κ³Όλνκ² νΈλ¦¬κ±°νμ§ λ§μΈμ. μ΄λ μ±λ₯μ μν₯μ λ―ΈμΉ μ μμ΅λλ€.
- μλ―Έ μλ μ΅μ»€ λ§ν¬ μ¬μ©: μ΅μ»€ λ§ν¬κ° νμ΄μ§μ λͺ ννκ² μ μλ μΉμ μ κ°λ¦¬ν€λμ§ νμΈνμΈμ.
- μ½ν
μΈ κ²ΉμΉ¨ λ°©μ§: κ³ μ λ ν€λλ μ€ν¬λ‘€ λμκ³Ό κ²ΉμΉ μ μλ λ€λ₯Έ μμμ μ μνμΈμ.
scroll-padding-top
κ³Ό κ°μ CSS μμ± λλ JavaScriptλ₯Ό μ¬μ©νμ¬ μ€ν¬λ‘€ μμΉλ₯Ό μ μ ν μ‘°μ νμΈμ.
μΌλ°μ μΈ λ¬Έμ λ° ν΄κ²°μ±
λΆλλ¬μ΄ μ€ν¬λ‘€λ§μ ꡬνν λ λ°μν μ μλ λͺ κ°μ§ μΌλ°μ μΈ λ¬Έμ μ κ·Έ ν΄κ²°μ± μ λ€μκ³Ό κ°μ΅λλ€.
- λ¬Έμ : λΆλλ¬μ΄ μ€ν¬λ‘€λ§μ΄ μλνμ§ μμ΅λλ€.
- ν΄κ²°μ±
:
scroll-behavior: smooth;
κ°html
λλbody
μμμ μ μ©λμλμ§ λ€μ νμΈνμΈμ. μ΅μ»€ λ§ν¬κ° ν΄λΉ μΉμ μ μ¬λ°λ₯΄κ² κ°λ¦¬ν€λμ§ νμΈνμΈμ.scroll-behavior
μμ±μ μ¬μ μνλ μΆ©λνλ CSS κ·μΉμ΄ μλμ§ νμΈνμΈμ.
- ν΄κ²°μ±
:
- λ¬Έμ : λΆλλ¬μ΄ μ€ν¬λ‘€λ§μ΄ λ무 λ리거λ λ무 λΉ λ¦
λλ€.
- ν΄κ²°μ± : "μ€ν¬λ‘€ μλ λ° μ΄μ§ μ¬μ©μ μ μ" μΉμ μ μ€λͺ λ λλ‘ JavaScriptλ₯Ό μ¬μ©νμ¬ μ€ν¬λ‘€ μλλ₯Ό μ¬μ©μ μ μνμΈμ. λΆλλ¬μκ³Ό λ°μμ± μ¬μ΄μ μ μ ν κ· νμ μ°ΎκΈ° μν΄ λ€μν μ΄μ§ ν¨μλ₯Ό μ€νν΄ λ³΄μΈμ.
- λ¬Έμ : κ³ μ λ ν€λκ° μ€ν¬λ‘€ λμμ κ²ΉμΉ©λλ€.
- ν΄κ²°μ±
: CSSμ
scroll-padding-top
μμ±μ μ¬μ©νμ¬ μ€ν¬λ‘€ 컨ν μ΄λ μλ¨μ ν¨λ©μ μΆκ°νμΈμ. λλ JavaScriptλ₯Ό μ¬μ©νμ¬ κ³ μ λ ν€λμ λμ΄λ₯Ό κ³μ°νκ³ μ€ν¬λ‘€ μμΉλ₯Ό μ μ ν μ‘°μ νμΈμ.
- ν΄κ²°μ±
: CSSμ
- λ¬Έμ : λΆλλ¬μ΄ μ€ν¬λ‘€λ§μ΄ λ€λ₯Έ JavaScript κΈ°λ₯κ³Ό μΆ©λν©λλ€.
- ν΄κ²°μ± : JavaScript μ½λκ° λΆλλ¬μ΄ μ€ν¬λ‘€λ§ μ λλ©μ΄μ κ³Ό μΆ©λνμ§ μλμ§ νμΈνμΈμ. μ΄λ²€νΈ 리μ€λμ μ½λ°±μ μ¬μ©νμ¬ λ€μν JavaScript ν¨μμ μ€νμ μ‘°μ¨νμΈμ.
κ³ κΈ κΈ°μ λ° κ³ λ € μ¬ν
κΈ°λ³Έμ λμ΄, λΆλλ¬μ΄ μ€ν¬λ‘€λ§ ꡬνμ ν₯μμν€κΈ° μν λͺ κ°μ§ κ³ κΈ κΈ°μ κ³Ό κ³ λ € μ¬νμ΄ μμ΅λλ€.
scroll-margin
λ° scroll-padding
μ¬μ©:
μ΄ CSS μμ±μ μ€ν¬λ‘€ μ€λ΄ν λμμ λν λ μΈλ°ν μ μ΄λ₯Ό μ 곡νκ³ κ³ μ λ ν€λλ λ°λ₯κΈμ μν΄ μ½ν μΈ κ° κ°λ €μ§λ κ²μ λ°©μ§νλ λ° λμμ΄ λ©λλ€.
scroll-margin
: μ€ν¬λ‘€ μ€λ μμ μ£Όλ³μ μ¬λ°±μ μ μν©λλ€.scroll-padding
: μ€ν¬λ‘€ μ€λ μμ μ£Όλ³μ ν¨λ©μ μ μν©λλ€.
μμ:
section {
scroll-margin-top: 20px; /* Adds a 20px margin above each section when scrolling */
}
html {
scroll-padding-top: 60px; /* Adds 60px padding at the top of the viewport when scrolling */
}
Intersection Observer APIμ κ²°ν©:
Intersection Observer APIλ₯Ό μ¬μ©νλ©΄ μμκ° λ·°ν¬νΈμ λ€μ΄μ€κ±°λ λκ° λλ₯Ό κ°μ§ν μ μμ΅λλ€. μ΄ APIλ₯Ό μ¬μ©νμ¬ μμμ κ°μμ±μ λ°λΌ λΆλλ¬μ΄ μ€ν¬λ‘€λ§ μ λλ©μ΄μ μ νΈλ¦¬κ±°ν μ μμ΅λλ€.
μμ:
const sections = document.querySelectorAll('section');
const observer = new IntersectionObserver(entries => {
entries.forEach(entry => {
if (entry.isIntersecting) {
// Do something when the section is in view
console.log('Section ' + entry.target.id + ' is in view');
} else {
// Do something when the section is out of view
console.log('Section ' + entry.target.id + ' is out of view');
}
});
}, {
threshold: 0.5 // Trigger when 50% of the element is visible
});
sections.forEach(section => {
observer.observe(section);
});
μ΄ μ½λλ Intersection Observer APIλ₯Ό μ¬μ©νμ¬ κ° μΉμ μ΄ λ·°ν¬νΈμ λ€μ΄μ€κ±°λ λκ° λλ₯Ό κ°μ§ν©λλ€. μ΄ μ 보λ₯Ό μ¬μ©νμ¬ μ¬μ©μ μ μ λΆλλ¬μ΄ μ€ν¬λ‘€λ§ μ λλ©μ΄μ λλ κΈ°ν μκ° ν¨κ³Όλ₯Ό νΈλ¦¬κ±°ν μ μμ΅λλ€.
μ€ν¬λ‘€ λμμ λν κΈλ‘λ² κ΄μ
λΆλλ¬μ΄ μ€ν¬λ‘€λ§μ κΈ°μ μ ꡬνμ μ μΈκ³μ μΌλ‘ μΌκ΄λμ§λ§, λ¬Ένμ λ° λ§₯λ½μ κ³ λ € μ¬νμ΄ μΈμλ μ¬μ©μ±μ μν₯μ λ―ΈμΉ μ μμ΅λλ€.
- μΈν°λ· μλ: μΈν°λ· μ°κ²°μ΄ λλ¦° μ§μμμλ μ¬μ©μ μ μ μ λλ©μ΄μ μ μν λκ·λͺ¨ JavaScript λΌμ΄λΈλ¬λ¦¬κ° λ‘λ μκ°κ³Ό UXμ λΆμ μ μΈ μν₯μ λ―ΈμΉ μ μμ΅λλ€. κ²½λ μ루μ λ° μ‘°κ±΄λΆ λ‘λ©μ μ°μ μνμΈμ.
- μ₯μΉ κΈ°λ₯: κ³ μ±λ₯ λ°μ€ν¬ν±μμ μ μ λ ₯ ν΄λν°μ μ΄λ₯΄κΈ°κΉμ§ κ΄λ²μν μ₯μΉμ μ΅μ ννμΈμ. λ€μν μ₯μΉ λ° νλ©΄ ν¬κΈ°μμ μ² μ ν ν μ€νΈνμΈμ.
- μ κ·Όμ± νμ€: μ₯μ κ° μλ μ¬μ©μλ₯Ό μν ν¬κ΄μ±μ 보μ₯νκΈ° μν΄ WCAG(μΉ μ½ν μΈ μ κ·Όμ± κ°μ΄λλΌμΈ)μ κ°μ κ΅μ μ κ·Όμ± νμ€μ μ€μνμΈμ.
- μ¬μ©μ κΈ°λμΉ: λΆλλ¬μ΄ μ€ν¬λ‘€λ§μ μΌλ°μ μΌλ‘ μ’μ νκ°λ₯Ό λ°μ§λ§, μ λλ©μ΄μ λ° λμμ λν μ¬μ©μ κΈ°λμΉμ μ μ¬μ μΈ λ¬Ένμ μ°¨μ΄μ μ μνμΈμ. λ€μν μ¬μ©μ κ·Έλ£Ήκ³Ό ν μ€νΈνμ¬ νΌλλ°±μ μμ§νμΈμ.
κ²°λ‘
scroll-behavior: smooth;
λ μΉμ¬μ΄νΈμ μ¬μ©μ κ²½νμ ν¬κ² ν₯μμν¬ μ μλ κ·μ€ν CSS μμ±μ
λλ€. κΈ°λ³Έ ꡬν, μ¬μ©μ μ μ μ΅μ
, μ κ·Όμ± κ³ λ € μ¬ν λ° λΈλΌμ°μ νΈνμ±μ μ΄ν΄ν¨μΌλ‘μ¨ μ μΈκ³ μ¬μ©μμκ² μννκ³ μ¦κ±°μ΄ νμ κ²½νμ μ 곡ν μ μμ΅λλ€. λͺ¨λ μ¬μ©μμ μꡬλ₯Ό μΆ©μ‘±νλ λΆλλ¬μ΄ μ€ν¬λ‘€λ§ ꡬνμ 보μ₯νκΈ° μν΄ μ κ·Όμ±μ μ°μ μνκ³ , μ±λ₯μ μ΅μ ννλ©°, μ² μ ν ν
μ€νΈνλ κ²μ μμ§ λ§μΈμ. μ΄ κ°μ΄λμ μ μλ μ§μΉ¨κ³Ό λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄λ©΄ λΆλλ¬μ΄ μ€ν¬λ‘€λ§μ λ§μ€ν°νκ³ μ μΈκ³ μ¬μ©μμκ² μκ°μ μΌλ‘ λ§€λ ₯μ μ΄κ³ μ¬μ©μ μΉνμ μΈ μΉμ¬μ΄νΈλ₯Ό λ§λ€ μ μμ΅λλ€.